# 快速入门
![LangChain](https://pica.zhimg.com/50/v2-56e8bbb52aa271012541c1fe1ceb11a2_r.gif 'LangChain中文网')

## 安装

要安装LangChain，请运行:

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import Install from "@snippets/get_started/quickstart/installation.mdx"

<Install/>

有关更多详细信息，请参阅我们的[安装指南](/docs/get_started/installation.html)。

## 环境设置

使用LangChain通常需要与一个或多个模型提供者、数据存储、API等进行集成。在本示例中，我们将使用OpenAI的模型API。

import OpenAISetup from "@snippets/get_started/quickstart/openai_setup.mdx"

<OpenAISetup/>

## 构建应用程序

现在我们可以开始构建语言模型应用程序了。LangChain提供了许多可以用来构建语言模型应用程序的模块。这些模块可以作为简单应用程序中的独立模块使用，也可以组合在一起用于更复杂的用例。

LangChain应用程序的核心构建模块是LLMChain。它结合了三个方面:
- LLM: 语言模型是核心推理引擎。要使用LangChain，您需要了解不同类型的语言模型以及如何使用它们。
- Prompt Templates: 提供语言模型的指令。这控制了语言模型的输出，因此了解如何构建提示和不同的提示策略至关重要。
- Output Parsers: 将LLM的原始响应转换为更易处理的格式，使得在下游使用输出变得容易。

在本入门指南中，我们将逐个介绍这三个组件，然后介绍将它们组合在一起的LLMChain。了解这些概念将使您能够很好地使用和定制LangChain应用程序。大多数LangChain应用程序允许您配置LLM和/或使用的提示，因此了解如何利用这一点将是一个很好的帮助。

## LLMs

LangChain中有两种类型的语言模型，称为:

- LLMs: 这是一个以字符串作为输入并返回字符串的语言模型
- ChatModels: 这是一个以消息列表作为输入并返回消息的语言模型

LLMs的输入/输出简单易懂 - 字符串。但是ChatModels呢？那里的输入是一个`ChatMessage`列表，输出是一个单独的`ChatMessage`。
一个`ChatMessage`具有两个必需的组件:

- `content`: 这是消息的内容。
- `role`: 这是`ChatMessage`来自的实体的角色。

LangChain提供了几个对象，用于方便地区分不同的角色:

- `HumanMessage`: 来自人类/用户的`ChatMessage`。
- `AIMessage`: 来自AI/助手的`ChatMessage`。
- `SystemMessage`: 来自系统的`ChatMessage`。
- `FunctionMessage`: 来自函数调用的`ChatMessage`。

如果这些角色都不合适，还可以使用`ChatMessage`类手动指定角色。有关如何最有效地使用这些不同的消息的更多信息，请参阅我们的提示指南。

LangChain为两者提供了一个标准接口，但了解这种差异以便为给定的语言模型构建提示非常有用。LangChain提供的标准接口有两种方法:
- `predict`: 接受一个字符串，返回一个字符串
- `predict_messages`: 接受一个消息列表，返回一个消息。

让我们看看如何使用这些不同类型的模型和不同类型的输入。首先，让我们导入LLM和ChatModel。

import ImportLLMs from "@snippets/get_started/quickstart/import_llms.mdx"

<ImportLLMs/>

`OpenAI`和`ChatOpenAI`对象基本上只是配置对象。您可以使用诸如`temperature`等参数对其进行初始化，并将其传递给其他对象。

接下来，让我们使用`predict`方法对字符串输入进行处理。

import InputString from "@snippets/get_started/quickstart/input_string.mdx"

<InputString/>

最后，让我们使用`predict_messages`方法对消息列表进行处理。

import InputMessages from "@snippets/get_started/quickstart/input_messages.mdx"

<InputMessages/>

对于这两种方法，您还可以将参数作为关键字参数传递。例如，您可以传入`temperature=0`来调整使用的温度，该温度将覆盖对象的配置。在运行时传入的任何值都将始终覆盖对象的配置。


## 提示模板

大多数LLM应用程序不会直接将用户输入传递到LLM中。通常，它们会将用户输入添加到一个更大的文本片段中，称为提示模板，该模板提供了有关特定任务的附加上下文。

在前面的示例中，我们传递给模型的文本包含了生成公司名称的指令。对于我们的应用程序，如果用户只需提供公司/产品的描述而无需担心给出模型指令，那将非常好。

PromptTemplates正是为此而设计的！它们将用户输入转化为完全格式化的提示的所有逻辑绑定在一起。这可以从非常简单的开始 - 例如，产生上述字符串的提示只需是

import PromptTemplateLLM from "@snippets/get_started/quickstart/prompt_templates_llms.mdx"
import PromptTemplateChatModel from "@snippets/get_started/quickstart/prompt_templates_chat_models.mdx"

<PromptTemplateLLM/>

然而，使用这些而不是原始字符串格式化的优势有几个。您可以“部分”出变量 - 例如，您可以一次只格式化某些变量。您可以将它们组合在一起，轻松地将不同的模板组合成一个单独的提示。有关这些功能的说明，请参阅[提示部分](/docs/modules/model_io/prompts)以获取更多详细信息。

PromptTemplates还可以用于生成消息列表。在这种情况下，提示不仅包含有关内容的信息，还包含每个消息（其角色、其在列表中的位置等）
在这里，最常见的是ChatPromptTemplate是ChatMessageTemplate的列表。每个ChatMessageTemplate包含了格式化该ChatMessage的指令 - 其角色，以及其内容。让我们在下面看一下这个:

<PromptTemplateChatModel/>

除了ChatMessageTemplate之外，ChatPromptTemplates还可以包括其他内容 - 有关更多详细信息，请参阅[提示部分](/docs/modules/model_io/prompts)。

## 输出解析器

OutputParsers将LLM的原始输出转换为可以在下游使用的格式。输出解析器有几种主要类型，包括:

- 将LLM的文本转换为结构化信息（例如JSON）
- 将ChatMessage转换为字符串
- 将除消息之外的其他信息（如OpenAI函数调用）转换为字符串。

有关此方面的详细信息，请参阅[输出解析器部分](/docs/modules/model_io/output_parsers)

在本入门指南中，我们将编写自己的输出解析器 - 将逗号分隔的列表转换为列表。

import OutputParser from "@snippets/get_started/quickstart/output_parser.mdx"

<OutputParser/>

## LLMChain

现在，我们可以将所有这些组合成一个链组件。这个链组件将接收输入变量，将其传递给提示模板以创建提示，将提示传递给LLM，然后通过一个（可选的）输出解析器将输出传递出去。这是一种方便地将模块化逻辑捆绑在一起的方式。让我们看看它的作用！

import LLMChain from "@snippets/get_started/quickstart/llm_chain.mdx"

<LLMChain/>

## 下一步

就是这样了！我们已经介绍了如何创建LangChain应用程序的核心构建块 - LLMChains。在所有这些组件（LLMs、prompts、输出解析器）中，还有很多微妙之处，还有很多其他不同的组件需要了解。要继续您的学习之旅:

- [深入](/docs/modules/model_io)LLMs、prompts和输出解析器
- 了解其他[关键组件](/docs/modules)
- 查看我们的[有用指南](/docs/guides)，详细介绍特定主题的步骤
- 探索[端到端用例](/docs/use_cases)
